package com.light.mytext.javaknowledge.datastructure

import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.light.mytext.R
import com.light.mytext.javaknowledge.datastructure.SingleLinkTable
import kotlinx.android.synthetic.main.activity_link_table.*

/**
 * 链表
 */
class LinkTableActivity : AppCompatActivity(), View.OnClickListener {
    //单链表
    var linkTable: SingleLinkTable<Int>? = SingleLinkTable()

    //静态栈
    var listStack: ListStackText<Int>? = ListStackText()

    //动态栈
    var linkTableStack: LinkTableStackText<Int>? = LinkTableStackText()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_link_table)
        init_Listener()
//        initSingleLinkTable()
//        initListStack()
        initLinkTableStack()
    }

    fun init_Listener() {
        //单链表
        bt_single_addfirst.setOnClickListener(this)
        bt_single_addend.setOnClickListener(this)
        bt_single_remove.setOnClickListener(this)
        bt_single_removefirst.setOnClickListener(this)
        bt_single_iscontions.setOnClickListener(this)
        //静态栈
        bt_liststack_isempty.setOnClickListener(this)
        bt_liststack_topdata.setOnClickListener(this)
        bt_liststack_put.setOnClickListener(this)
        bt_liststack_out.setOnClickListener(this)
        //动态栈
        bt_linktablestack_isempty.setOnClickListener(this)
        bt_linktablestack_topdata.setOnClickListener(this)
        bt_linktablestack_put.setOnClickListener(this)
        bt_linktablestack_out.setOnClickListener(this)
    }

    /**
     * 单链表
     */
    fun initSingleLinkTable() {
        //往链表内添加数据
        for (i in 0..9) {
            linkTable!!.addHead(i)
        }
        linkTable!!.logMess()
    }

    /**
     * 静态栈（数组实现栈）
     */
    fun initListStack() {
        //往链表内添加数据
        for (i in 0..5) {
            listStack!!.pushStack(i)
        }
        listStack!!.LogMess()
    }

    /**
     * 动态栈（链表实现栈）
     */
    fun initLinkTableStack() {
        //往链表内添加数据
        for (i in 0..5) {
            linkTableStack!!.pushStack(i)
        }
        linkTableStack!!.logMess()
    }


    override fun onClick(v: View?) {
        when (v?.id) {
            //单链表
            R.id.bt_single_addfirst -> {//添加头部元素
                linkTable!!.addHead(100)
                linkTable!!.logMess()
            }
            R.id.bt_single_addend -> {
                linkTable!!.addLast(-1)
                linkTable!!.logMess()
            }
            R.id.bt_single_remove -> {//删除元素
                linkTable!!.remove(3)
                linkTable!!.logMess()
            }
            R.id.bt_single_removefirst -> {//删除第一个元素
                linkTable!!.removeFirst()
                linkTable!!.logMess()
            }
            R.id.bt_single_iscontions -> {//是否包含
                linkTable!!.isContains(1)
                Log.i("LinkTableActivity==", "" + linkTable!!.isContains(1))
            }
            //静态栈
            R.id.bt_liststack_isempty -> {//是否为空
                Log.i("LinkTableActivity==", "" + listStack!!.isEmpty)
            }
            R.id.bt_liststack_topdata -> {//获取栈顶数据
                Log.i("LinkTableActivity==", "" + listStack!!.topData)
            }
            R.id.bt_liststack_put -> {//进栈
                listStack!!.pushStack(100)
                listStack!!.LogMess()
            }
            R.id.bt_liststack_out -> {//出栈
                listStack!!.outStack()
                listStack!!.LogMess()
            }
            //动态栈
            R.id.bt_linktablestack_isempty -> {//是否为空
                Log.i("LinkTableActivity==", "" + linkTableStack!!.isEmpty)
            }
            R.id.bt_linktablestack_topdata -> {//栈顶数据
                Log.i("LinkTableActivity==", "" + linkTableStack!!.topData)
            }
            R.id.bt_linktablestack_put -> {//进栈
                linkTableStack!!.pushStack(100)
                linkTableStack!!.logMess()
            }
            R.id.bt_linktablestack_out -> {//出栈
                linkTableStack!!.outStack()
                linkTableStack!!.logMess()
            }


        }
    }
}